package test3_12;
import java.util.Arrays;
import java.util.Scanner;
public class Homework6_11_triangleYanghui {
    public static void main(String[] args) {
        /*
        杨辉三角如下：
        1
        1 1
        1 2 1
        1 3 3 1
        1 4 6 4 1
        杨辉三角的特点：第i行有i个元素,每一行的第一个元素和最后一个元素都为1
        除了1之外，每个元素的值，都等于上一行同位置的元素以及前一个元素的和。
        要求：读入一个整数n,输出杨辉三角的前n行
         */

        //输入n行
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入行数：");
        int n = sc.nextInt();
        //初始化一个二位数组，大小为n
        int[][] arr = new int[n][];

        //第一个循环为层数
        for (int i = 0; i < n; i++) {
            arr[i] = new int[i+1];
            //第二个循环用于判断一层有多少个数
            for (int j = 0; j <= i; j++) {
                //杨辉三角定理可知第一个和最后一个都为1，所以直接赋值
                if(j==0 || j==i){
                    arr[i][j] = 1;
                    //当不是首尾的时候，数值为上一层的第j个和第j-1个数相加
                }else{
                    arr[i][j] = arr[i-1][j-1]+arr[i-1][j];
                }
            }
        }

        //用双重for循环输出数据
        for (int i = 0; i < arr.length; i++) {
            //因为定义的二维数组内部数组长度与外部相等，但只需输出对应的前几个数的值即可，所以j的范围要小于i+1
            for (int j = 0; j < arr[i].length; j++) {
                System.out.print(arr[i][j]+" ");
            }
            System.out.println();
        }
    }
}
